/*
 * DiretorSerializacaoDao
 * 
 * Versão 1.0
 * 
 * Data de criação: 27/05/2013
 * 
 * Copyright (c)
 * Autor: Odair José Tanes
 * Matrícula: 2009209186
 * Disciplina: Projeto de Sistemas de Software
 * 
 * Protótipo criado para exercício da disciplina
 * 
 */
package edu.ufes.pss.exercicioSwingBanco.dao;

import edu.ufes.pss.exercicioSwingBanco.interfaces.DaoInterface;
import edu.ufes.pss.exercicioSwingBanco.interfaces.PersistivelInterface;
import edu.ufes.pss.exercicioSwingBanco.model.Diretor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;

/**
 *
 * @author OdairJT
 */
public class DiretorSerializacaoDao implements DaoInterface {

    final String pathArquivoDiretor = "data/Diretor.pss";

    @Override
    public boolean salvarOuAtualizar(PersistivelInterface pObjeto) {

        boolean retorno = false;

        TreeSet<PersistivelInterface> diretores = (TreeSet) this.buscarTodos();

        Diretor novo = (Diretor) pObjeto;
        Diretor atual = (Diretor) this.buscarObjeto(novo.getCpf());

        if (atual != null) {
            diretores.remove(atual);
        }

        diretores.add(novo);

        try {
            FileOutputStream arquivoDB = new FileOutputStream(pathArquivoDiretor);
            ObjectOutputStream ooDB = new ObjectOutputStream(arquivoDB);
            ooDB.writeObject(diretores);
            ooDB.close();
            retorno = true;
        } catch (Exception e) {
            System.err.println("Erro ao serializar " + e.getMessage());
        }

        return retorno;

    }

    @Override
    public boolean excluir(PersistivelInterface pObjeto) {

        boolean retorno = false;

        TreeSet<PersistivelInterface> agencias = (TreeSet) this.buscarTodos();
        agencias.remove(pObjeto);

        try {
            FileOutputStream arquivoDB = new FileOutputStream(pathArquivoDiretor);
            ObjectOutputStream ooDB = new ObjectOutputStream(arquivoDB);
            ooDB.writeObject(agencias);
            ooDB.close();
            retorno = true;
        } catch (Exception e) {
            System.err.println("Erro ao serializar " + e.getMessage());
        }

        return retorno;

    }

    @Override
    public PersistivelInterface buscarObjeto(Object pParametro) {

        Diretor diretor = null;

        TreeSet<PersistivelInterface> diretores = (TreeSet) this.buscarTodos();
        Iterator<PersistivelInterface> itDiretores = diretores.iterator();
        Diretor tempDiretor;

        while (itDiretores.hasNext()) {
            tempDiretor = (Diretor) itDiretores.next();
            if (tempDiretor.getCpf().equals((String) pParametro)) {
                diretor = tempDiretor;
            }
        }

        return diretor;

    }

    @Override
    public Collection<PersistivelInterface> buscarTodos() {

        TreeSet<Diretor> diretores = new TreeSet<Diretor>();

        try {
            File arquivoDB = new File(pathArquivoDiretor);
            FileInputStream fiDB = new FileInputStream(arquivoDB.getAbsolutePath());
            ObjectInputStream oiDB = new ObjectInputStream(fiDB);
            diretores = (TreeSet<Diretor>) oiDB.readObject();
            oiDB.close();
        } catch (Exception e) {
            System.err.println("Erro ao recuperar " + e.getMessage());
        }

        return (Collection) diretores;

    }
}
